'use strict';
const message = process.env['HUSKY_GIT_PARAMS'];
const fs = require('fs');

const types = ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'release', 'revert', 'style', 'test'];

const scopes = ['showcase', 'packaging', 'changelog', 'schematics', 'module:*'];

function parseMessage(message) {
    const PATTERN = /^(\w+)(?:\(([^)]+)\))?\: (.+)$/;
    const match = PATTERN.exec(message);
    if (!match) {
        return null;
    }
    return {
        type: match[1] || null,
        scope: match[2] || null,
    };
}

function getScopesRule() {
    const messages = fs.readFileSync(message, { encoding: 'utf-8' });
    const parsed = parseMessage(messages.split('\n')[0]);
    if (!parsed) {
        return [2, 'always', scopes];
    }
    const { scope, type } = parsed;
    if (scope && !scopes.includes(scope) && type !== 'release' && !/module:.+/.test(scope)) {
        return [2, 'always', scopes];
    } else {
        return [2, 'always', []];
    }
}

module.exports = {
    extends: ['@commitlint/config-conventional'],
    rules: {
        'type-enum': [2, 'always', types],
        'scope-enum': getScopesRule,
    },
};
